package org.igeek.config.bean.ch03;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

/**
 * @package org.igeek.config.ch03
 * @Description  工厂bean
 * @Author LittlePunk [296526219@qq.ccom]
 * @Version 2022.1
 * @Date 2023/11/13 16:31
 *
 * factoryBean接口:
 *  public Object getObject()  返回ioc注册的实例
 *  public Class<?> getObjectType()  返回ioc注册的实例对象的类型
 *  public boolean isSingleton()  判断是否是单例  true单例
 *
 *  beanFactory接口和 FactoryBean的区别
 *  简单工厂模式:
 *  Beanfactory接口:  通过beanName 获取实例bean  根据beanName返回某个类的实例对象
 *  @ Bean  定义的Bean是经过完整的Bean声明周期的
 *
 *  工厂方法设计模式：  DaoFactory  ServiceFactory
 *  FactoryBean接口：只负责某个对象的实例化  通过getObject()方法返回该实例对象
 *  通过这种方法创造出来的Bean 只会经过初始化 其他的Spring的生命周期步骤是不会经过的，比如依赖注入
 */
@Component("emp2")
public class MyFactoryBean implements FactoryBean {


    @Override
    public Object getObject() throws Exception {
        return new Employee("小红","24155");
    }

    @Override
    public Class<?> getObjectType() {
        return Employee.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}
